from PublicReference.base import *

class 毒神绝主动技能(主动技能):
    中毒基础 = 0
    中毒成长 = 0
    中毒倍率 = 1
    出血基础 = 0
    出血成长 = 0
    出血倍率 = 1
    灼伤基础 = 0
    灼伤成长 = 0
    灼伤倍率 = 1
    涂毒基础 = 0
    涂毒成长 = 0
    涂毒倍率 = 1

    def 等效百分比(self, 武器类型):
        if self.等级 == 0:
            return 0
        else:
            return int((self.攻击次数 * (self.基础 + self.成长 * self.等级)
                 + self.中毒倍率 * (self.中毒基础 + self.中毒成长 * self.等级)
                 + self.出血倍率 * (self.出血基础 + self.出血成长 * self.等级) 
                 + self.灼伤倍率 * (self.灼伤基础 + self.灼伤成长 * self.等级) 
                 + self.涂毒倍率 * (self.涂毒基础 + self.涂毒成长 * self.等级))
                 * (1 + self.TP成长 * self.TP等级) * self.倍率)
                      
class 毒神绝技能0(毒神绝主动技能):
    名称 = '抛沙'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    基础 = 398.234042553192
    成长 = 54.7659574468085
    涂毒基础 = 39.531914893617
    涂毒成长 = 5.46808510638298
    CD = 3.0
    TP成长 = 0.08
    TP上限 = 7

class 毒神绝技能1(毒神绝主动技能):
    名称 = '擒月炎'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    基础 = 1382.2
    成长 = 142.8
    攻击次数 = 1.6 #异常倍率
    涂毒基础 = 137.755555555556
    涂毒成长 = 14.2444444444444
    CD = 5.5
    TP成长 = 0.10
    TP上限 = 7

class 毒神绝技能2(毒神绝主动技能):
    名称 = '毒影针'
    所在等级 = 20
    等级上限 = 60
    基础等级 = 43
    基础 = 1542.14285714286
    成长 = 63.8571428571429
    中毒基础 = 710.761904761905
    中毒成长 = 80.2380952380952
    出血基础 = 710.761904761905
    出血成长 = 80.2380952380952
    涂毒基础 = 214.666666666667
    涂毒成长 = 24.3333333333333
    CD = 6.0
    TP成长 = 0.10
    TP上限 = 7

class 毒神绝技能3(毒神绝主动技能):
    名称 = '双重投掷'
    所在等级 = 20
    等级上限 = 30
    基础等级 = 20
    是否有伤害 = 0
    关联技能 = ['无']


class 毒神绝技能4(被动技能):
    名称 = '爪精通'
    所在等级 = 25
    等级上限 = 30
    基础等级 = 20
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.21 + 0.01* self.等级, 5)

    def 物理攻击力倍率(self, 武器类型):
        self.加成倍率(武器类型)

    def 魔法攻击力倍率(self, 武器类型):
        self.加成倍率(武器类型)

class 毒神绝技能5(毒神绝主动技能):
    名称 = '砖袭'
    所在等级 = 25
    等级上限 = 60
    基础等级 = 41
    基础 = 2094.3
    成长 = 236.7
    涂毒基础 = 207.3
    涂毒成长 = 23.7
    CD = 6.0
    TP成长 = 0.10
    TP上限 = 7

class 毒神绝技能6(毒神绝主动技能):
    名称 = '挑衅'
    所在等级 = 35
    等级上限 = 20
    基础等级 = 10
    是否有伤害 = 0
    关联技能 = ['所有']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.15 + 0.01* self.等级, 5)

class 毒神绝技能7(毒神绝主动技能):
    名称 = '伏虎霸王拳'
    备注 = '(不可抓取)'
    所在等级 = 30
    等级上限 = 60
    基础等级 = 38
    基础 = 455.486486486486
    成长 = 51.5135135135135
    攻击次数 = 1.6 #异常倍率
    CD = 15.0
    TP上限 = 7
    TP成长 = 0.845
    def 等效百分比(self, 武器类型):
        if self.等级 == 0:
            return 0
        else:
            return int(self.攻击次数 * (self.基础 + self.成长 * self.等级)
                 * (8.445 + self.TP成长 * self.TP等级) * self.倍率)

class 毒神绝技能8(被动技能):
    名称 = '狂霸王拳'
    所在等级 = 40
    等级上限 = 11
    基础等级 = 1
    关联技能 = ['伏虎霸王拳']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.40 + 0.02* self.等级, 5)


class 毒神绝技能9(毒神绝主动技能):
    名称 = '裂地飞沙'
    所在等级 = 35
    等级上限 = 60
    基础等级 = 36
    基础 = 6396
    成长 = 722
    攻击次数 = 1.2
    涂毒基础 = 638.4
    涂毒成长 = 73.6
    CD = 20.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.倍率 *= 1.27
        self.CD *= 1.00

class 毒神绝技能10(毒神绝主动技能):
    名称 = '毒雷引爆'
    所在等级 = 40
    等级上限 = 60
    基础等级 = 33
    基础 = 1031.6875
    成长 = 116.3125
    中毒基础 = 254.25
    中毒成长 = 28.75
    涂毒基础 = 118.375
    涂毒成长 = 13.625
    CD = 24.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.倍率 *= 1.07
        self.CD *= 0.90

class 毒神绝技能11(毒神绝主动技能):
    名称 = '街头风暴'
    所在等级 = 45
    等级上限 = 60
    基础等级 = 31
    基础 = 8765.5
    成长 = 989.5
    中毒基础 = 1447.5
    中毒成长 = 163.5
    涂毒基础 = 866.3333333
    涂毒成长 = 98.66666667
    CD = 45.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.倍率 *= 1.227

class 毒神绝技能12(被动技能):
    名称 = '猛毒之血'
    所在等级 = 48
    等级上限 = 40
    基础等级 = 20

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.035 + 0.015 * self.等级, 5)

class 毒神绝技能13(毒神绝主动技能):
    名称 = '死亡毒雾'
    备注 = '(6毒伤8爆炸)'
    所在等级 = 50
    等级上限 = 40
    基础等级 = 12
    CD = 145

    基础 = 3608.54545454545
    成长 = 1105.45454545455
    攻击次数 = 8
    中毒基础 = 487.454545454545
    中毒成长 = 147.545454545455
    中毒倍率 = 6
    涂毒基础 = 362.818181818182
    涂毒成长 = 110.181818181818
    涂毒倍率 = 8

    def 力智加成(self):
        return 91 + self.等级 * 6.5

    def 防御减少(self):
        return 946 + 186 * self.等级 + (self.等级 + 1) * self.等级 / 2 * 11

#1觉下减防可以使用成长推算或者固定提升率1.5％直接归入20S的计算器毒雾UI功能
#3.建议在死亡毒雾UI中加入毒雾中毒次数计算（取6-8次），当前版本的计算公式为
#（爆炸X8段）+（中毒X6次）+（爆炸荼毒X8段）；3觉版本则段数为固定4次

class 毒神绝技能14(毒神绝主动技能):
    名称 = '猛毒擒月炎'
    所在等级 = 60
    等级上限 = 40
    基础等级 = 23
    CD = 30.0
    基础 = 7793.72727272727
    成长 = 880.272727272727
    攻击次数 = 1.6  #异常加成
    中毒基础 = 1232.68181818182
    中毒成长 = 139.318181818182
    涂毒基础 = 901
    涂毒成长 = 102
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.倍率 *= 1.06
        self.攻击次数 = 1.84  #异常加成
        self.CD *= 0.80


class 毒神绝技能15(毒神绝主动技能):
    名称 = '爆碎砖袭'
    所在等级 = 70
    等级上限 = 40
    基础等级 = 18
    基础 = 15753.70588
    成长 = 1779.294118
    涂毒基础 = 1568.941176
    涂毒成长 = 178.0588235

    CD = 50.0
    TP成长 = 0.10
    TP上限 = 7
    是否有护石 = 1
    def 装备护石(self):
        self.倍率 *= 1.119
        self.CD *= 1.00

class 毒神绝技能16(被动技能):
    名称 = '猛毒之伤'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 11

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.16 + 0.02 * self.等级, 5)

class 毒神绝技能17(毒神绝主动技能):
    名称 = '连环毒爆弹'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 16
    基础 = 39486.60667
    成长 = 4458.593333
    中毒基础 = 880.32
    中毒成长 = 99.68
    涂毒基础 = 2747.533333
    涂毒成长 = 310.4666667
    CD = 40.0

class 毒神绝技能18(毒神绝主动技能):
    名称 = '毒龙轰天雷'
    所在等级 = 80
    等级上限 = 40
    基础等级 = 13
    基础 = 35466.25
    成长 = 4005.75
    中毒基础 = 234.333333333333
    中毒成长 = 26.6666666666667
    涂毒基础 = 3948.666667
    涂毒成长 = 447.3333333
    CD = 45.0

class 毒神绝技能19(毒神绝主动技能):
    名称 = '万毒噬心诀'
    所在等级 = 85
    等级上限 = 40
    基础等级 = 5
    基础 = 47664
    成长 = 14384
    涂毒基础 = 4780
    涂毒成长 = 1436
    CD = 180.0
    关联技能 = ['所有']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.00 + 0.02 * self.等级, 5)

    #不包含平x3 x4

class 毒神绝技能20(毒神绝主动技能):
    名称 = '万毒噬心诀x4'
    所在等级 = 85
    等级上限 = 1
    基础等级 = 1
    基础 = 7185
    成长 = 1257
    涂毒基础 = 715
    涂毒成长 = 126
    CD = 1.0

class 毒神绝技能21(毒神绝主动技能):
    名称 = '万毒噬心诀x3'
    所在等级 = 85
    等级上限 = 1
    基础等级 = 1
    基础 = 5031.5
    成长 = 897.5
    涂毒基础 = 500
    涂毒成长 = 90
    CD = 0.8


class 毒神绝技能22(被动技能):
    名称 = '卓越之力'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 4

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)

class 毒神绝技能23(被动技能):
    名称 = '超卓之心'
    所在等级 = 95
    等级上限 = 11
    基础等级 = 1

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.045 + 0.005 * self.等级, 5)

class 毒神绝技能24(被动技能):
    名称 = '觉醒之抉择'
    所在等级 = 100
    等级上限 = 40
    基础等级 = 2
    关联技能 = ['无']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.10 + 0.05 * self.等级, 5)

毒神绝技能列表 = []
i = 0
while i >= 0:
    try:
        exec('毒神绝技能列表.append(毒神绝技能'+str(i)+'())')
        i += 1
    except:
        i = -1

毒神绝技能序号 = dict()
for i in range(len(毒神绝技能列表)):
    毒神绝技能序号[毒神绝技能列表[i].名称] = i

毒神绝一觉序号 = 0
毒神绝二觉序号 = 19
毒神绝三觉序号 = 0
for i in 毒神绝技能列表:
    if i.所在等级 == 50:
        毒神绝一觉序号 = 毒神绝技能序号[i.名称]
    if i.所在等级 == 100:
        毒神绝三觉序号 = 毒神绝技能序号[i.名称]

毒神绝护石选项 = ['无']
for i in 毒神绝技能列表:
    if i.是否有伤害 == 1 and i.是否有护石 == 1:
        毒神绝护石选项.append(i.名称)

毒神绝符文选项 = ['无']
for i in 毒神绝技能列表:
    if i.所在等级 >= 20 and i.所在等级 <= 80 and i.所在等级 != 50 and i.是否有伤害 == 1:
        毒神绝符文选项.append(i.名称)

class 毒神绝角色属性(角色属性):

    职业名称 = '毒神绝'

    武器选项 = ['爪']
    
    #'物理百分比','魔法百分比','物理固伤','魔法固伤'
    伤害类型选择 = ['魔法百分比']
    
    #默认
    伤害类型 = '魔法百分比'
    防具类型 = '重甲'
    防具精通属性 = ['力量','智力']

    主BUFF = 9.50
   
    #基础属性(含唤醒)
    基础力量 = 976.0
    基础智力 = 959.0
    
    #适用系统奶加成
    力量 = 基础力量
    智力 = 基础智力

    #人物基础 + 唤醒
    物理攻击力 = 65.0
    魔法攻击力 = 65.0
    独立攻击力 = 1045.0
    火属性强化 = 13
    冰属性强化 = 13
    光属性强化 = 13
    暗属性强化 = 13

    死亡毒雾力智开关 = 0
  
    def __init__(self):
        self.技能栏= copy.deepcopy(毒神绝技能列表)
        self.技能序号= copy.deepcopy(毒神绝技能序号)

    def 站街力量(self):
        return int(max(self.力量,self.智力))

    def 站街智力(self):
        return self.站街力量()

    def 面板力量(self):
        return max(super().面板力量(), super().面板智力())
      
    def 面板智力(self):
        return self.面板力量()

    def 装备基础(self):
        self.力量 += 防具力量[self.防具类型]
        self.智力 += 防具智力[self.防具类型]
        if 装备列表[装备序号[self.装备栏[0]]].品质 == '神话':
            self.力量 += 神话上衣额外力量[self.防具类型]
            self.智力 += 神话上衣额外智力[self.防具类型]

        for i in [0,1,2,3,4]:
            if 装备列表[装备序号[self.装备栏[i]]].所属套装 != '智慧产物':
                x = 精通计算(100,装备列表[装备序号[self.装备栏[i]]].品质,self.强化等级[i],部位列表[i])
            else:
                x = 精通计算(100,装备列表[装备序号[self.装备栏[i]]].品质,0,部位列表[i])
            if '力量' in self.防具精通属性:
                self.力量 += x
            if '智力' in self.防具精通属性:
                self.智力 += x
  

        for i in [9,10]:
            if 装备列表[装备序号[self.装备栏[i]]].所属套装 != '智慧产物':
                x = 左右计算(100,'史诗',self.强化等级[i])
                self.力量 += x
                self.智力 += x

        for i in range(0,12):
            if self.是否增幅[i] and 装备列表[装备序号[self.装备栏[i]]].所属套装 != '智慧产物':
                x = 增幅计算(100,装备列表[装备序号[self.装备栏[i]]].品质,self.强化等级[i])
                self.力量 += x
                self.智力 += x

        if 装备列表[装备序号[self.装备栏[11]]].所属套装 != '智慧产物':
            self.物理攻击力 += 武器计算(100,'史诗',self.强化等级[11],self.武器类型,'物理')
            self.魔法攻击力 += 武器计算(100,'史诗',self.强化等级[11],self.武器类型,'魔法')
            self.独立攻击力 += 锻造计算(100,'史诗',self.武器锻造等级)
        
        if 装备列表[装备序号[self.装备栏[8]]].所属套装 != '智慧产物':
            x = 耳环计算(100,装备列表[装备序号[self.装备栏[8]]].品质,self.强化等级[8])
            self.物理攻击力 += x
            self.魔法攻击力 += x
            self.独立攻击力 += x

        for i in [5,6,7,8,9,10,11]:
            self.力量 += 装备列表[装备序号[self.装备栏[i]]].力量
            self.智力 += 装备列表[装备序号[self.装备栏[i]]].智力
            self.物理攻击力 += 装备列表[装备序号[self.装备栏[i]]].物理攻击力
            self.魔法攻击力 += 装备列表[装备序号[self.装备栏[i]]].魔法攻击力
            self.独立攻击力 += 装备列表[装备序号[self.装备栏[i]]].独立攻击力

    def 被动倍率计算(self):
        super().被动倍率计算()
        self.技能栏[self.技能序号['万毒噬心诀x3']].被动倍率 /= self.技能栏[self.技能序号['万毒噬心诀']].加成倍率(self.武器类型)
        self.技能栏[self.技能序号['万毒噬心诀x4']].被动倍率 /= self.技能栏[self.技能序号['万毒噬心诀']].加成倍率(self.武器类型)
        self.技能栏[self.技能序号['万毒噬心诀x3']].等级 = self.技能栏[self.技能序号['万毒噬心诀']].等级
        self.技能栏[self.技能序号['万毒噬心诀x4']].等级 = self.技能栏[self.技能序号['万毒噬心诀']].等级
        
        x = self.技能栏[self.技能序号['双重投掷']].等级
        self.技能栏[self.技能序号['抛沙']].攻击次数 *= 1 + 0.30 + 0.02 * x
        self.技能栏[self.技能序号['抛沙']].涂毒倍率 *= 2

        self.技能栏[self.技能序号['街头风暴']].攻击次数 *= 1 + 0.49 + 0.01 * x
        self.技能栏[self.技能序号['街头风暴']].涂毒倍率 *= 2

    def 伤害指数计算(self):

        防御 = 443243
        if self.死亡毒雾力智开关 == 1:
            self.进图力量 += self.技能栏[self.技能序号['死亡毒雾']].力智加成()
            self.进图智力 += self.技能栏[self.技能序号['死亡毒雾']].力智加成()
            防御 -= self.技能栏[self.技能序号['死亡毒雾']].防御减少()

        for i in self.技能栏:
            if i.是否主动 == 1:
                i.涂毒倍率 *= (self.主BUFF - 1)

        基准倍率 = 1.5 * (1 - 防御 / (防御 + 20000))

        if self.伤害类型 == '物理百分比':
            面板 = (self.面板力量()/250+1) * round((self.物理攻击力 + self.进图物理攻击力) * (1 + self.百分比三攻), 3)
        if self.伤害类型 == '魔法百分比':
            面板 = (self.面板智力()/250+1) * round((self.魔法攻击力 + self.进图魔法攻击力) * (1 + self.百分比三攻), 3)
        if self.伤害类型 == '物理固伤':
            面板 = (self.面板力量()/250+1) * round((self.独立攻击力 + self.进图独立攻击力) * (1 + self.百分比三攻), 3)
        if self.伤害类型 == '魔法固伤':
            面板 = (self.面板智力()/250+1) * round((self.独立攻击力 + self.进图独立攻击力) * (1 + self.百分比三攻), 3)

        self.火属性强化 = int(self.火属性强化 * (1+self.百分比属强))
        self.冰属性强化 = int(self.冰属性强化 * (1+self.百分比属强))
        self.光属性强化 = int(self.光属性强化 * (1+self.百分比属强))
        self.暗属性强化 = int(self.暗属性强化 * (1+self.百分比属强))
        if self.攻击属性 == 0:
            属性倍率=1.05+0.0045*max(self.火属性强化,self.冰属性强化,self.光属性强化,self.暗属性强化)
        elif self.攻击属性 == 1:
            属性倍率=1.05+0.0045*self.火属性强化
        elif self.攻击属性 == 2:
            属性倍率=1.05+0.0045*self.冰属性强化
        elif self.攻击属性 == 3:
            属性倍率=1.05+0.0045*self.光属性强化
        elif self.攻击属性 == 4:
            属性倍率=1.05+0.0045*self.暗属性强化
        增伤倍率=1+self.伤害增加
        增伤倍率*=1+self.暴击伤害
        增伤倍率*=1+self.最终伤害
        增伤倍率*=self.技能攻击力
        增伤倍率*=1+self.持续伤害*(1-0.1*self.持续伤害计算比例)
        增伤倍率*=1+self.附加伤害+self.属性附加*属性倍率
        self.伤害指数=面板*属性倍率*增伤倍率*基准倍率/100

class 毒神绝(角色窗口):
    def 窗口属性输入(self):
        self.初始属性 = 毒神绝角色属性()
        self.角色属性A = 毒神绝角色属性()
        self.角色属性B = 毒神绝角色属性()
        self.一觉序号 = 毒神绝一觉序号
        self.二觉序号 = 毒神绝二觉序号
        self.三觉序号 = 毒神绝三觉序号
        self.护石选项 = copy.deepcopy(毒神绝护石选项)
        self.符文选项 = copy.deepcopy(毒神绝符文选项)

    def 界面(self):
        super().界面()
        self.死亡毒雾力智开关=QCheckBox('死亡毒雾效果',self.main_frame2)
        self.死亡毒雾力智开关.resize(100,20)
        self.死亡毒雾力智开关.move(325,420)
        self.死亡毒雾力智开关.setStyleSheet(复选框样式)
        self.死亡毒雾力智开关.setToolTip('包含力智和减防')

        self.毒雷个数数选择=MyQComboBox(self.main_frame2)
        self.毒雷个数数选择.addItem('毒雷引爆：0颗')
        self.毒雷个数数选择.addItem('毒雷引爆：1颗')
        self.毒雷个数数选择.addItem('毒雷引爆：2颗')
        self.毒雷个数数选择.addItem('毒雷引爆：3颗')
        self.毒雷个数数选择.addItem('毒雷引爆：4颗')
        self.毒雷个数数选择.addItem('毒雷引爆：5颗')
        self.毒雷个数数选择.addItem('毒雷引爆：6颗')
        self.毒雷个数数选择.addItem('毒雷引爆：7颗')
        self.毒雷个数数选择.addItem('毒雷引爆：8颗')
        self.毒雷个数数选择.setCurrentIndex(5)
        self.毒雷个数数选择.resize(120,20)
        self.毒雷个数数选择.move(315,460)

    def 输入属性(self, 属性):
        super().输入属性(属性)
        if self.死亡毒雾力智开关.isChecked():
            属性.死亡毒雾力智开关 = 1
        属性.技能栏[属性.技能序号['毒雷引爆']].倍率 *= self.毒雷个数数选择.currentIndex()